// 引入express模块
const express=require('express')
//引入auth模块
const auth=require('./wechat/auth')
//引入wechat模块
const Wechat=require('./wechat/wechart')
// 创建wbchat的示例对象
const wechat=new Wechat();
//引入sha1加密
const sha1=require('sha1')

const config=require('./config')

// 创建app应用对象
const app=express()

// ejs 配置
    // 模板资源目录
app.set('views','./views');
    // 配置模板引擎
app.set('view engine','ejs')

//页面路由
app.get('/search',async (req,res)=>{  //这是一个最基础的路由
    /*
    一、生成js-sdk使用的签名
    1、组合参与签名的四个参数：
    jsapi_ticket（临时票据）、noncestr（随机字符串）、timestamp（时间戳）、url（当前服务器地址）
    2、按照字典序排序、再拼接在一起，以&
    3、进行sha1加密，最终生成我们想要的 signature 签名
    */
    // 临时票据
    const {ticket}=await wechat.fetchTicket()
    // 随机字符串
    const noncestr=(''+Math.round()).split('.')[1];
    // 时间戳
    const timestamp=Date.now();
    //url当前服务器地址
    const url=config.url;

    let arr=[
        `jsapi_ticket=${ticket}`,
        `noncestr=${noncestr}`,
        `timestamp=${timestamp}`,
        `url=${url}/search`];//还得把当前页面的地址拼上去
    let arrSort=arr.sort();
    const str=arrSort.join('&'); //  xxx=xxx&xxx=xxx&xxx=xxx
    const signature=sha1(str);  //生成的 这个signature是给 页面使用

    //ejs技术 当用户访问这个地址的时候，我们在后台渲染完这个页面给他
    res.render('search',{ //如何传入参数 给页面使用
        signature,  //注意  这些字母必须是小写，一旦有大写就会出问题
        noncestr,
        timestamp
    });
})

//验证服务器的有效性
app.use(auth())

//监听端口号
app.listen(3000,()=>console.log('服务器启动成功'))